home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dirut / dosdir21.zip / TAILOR.H < prev    next >
C/C++ Source or Header  |  1994-06-22  |  6KB  |  229 lines

  1. /* tailor.h -- Not copyrighted 1993 Mark Adler */
  2.  
  3. #ifndef _TAILOR_H
  4. #define _TAILOR_H
  5.  
  6. /* Define MSDOS for Turbo C and Power C */
  7. #ifdef __POWERC
  8. #  define __TURBOC__
  9. #  define MSDOS
  10. #endif /* __POWERC */
  11.  
  12. #if (defined(__MSDOS__) && !defined(MSDOS))
  13. #  define MSDOS
  14. #endif
  15.  
  16. #ifdef ATARI_ST
  17. #  undef MSDOS   /* avoid the MS-DOS specific includes */
  18. #endif
  19.  
  20. /* Use prototypes and ANSI libraries if _STDC__, or Microsoft or Borland C,
  21.  * or Silicon Graphics, or IBM C Set/2, or Watcom C, or GNU gcc under emx.
  22.  */
  23. #if defined(__STDC__) || defined(MSDOS) || defined(ATARI_ST) || defined(sgi)
  24. #  ifndef PROTO
  25. #    define PROTO
  26. #  endif /* !PROTO */
  27. #  define MODERN
  28. #endif
  29.  
  30. #if defined(__IBMC__) || defined(__EMX__) || defined(__WATCOMC__)
  31. #  ifndef PROTO
  32. #    define PROTO
  33. #  endif /* !PROTO */
  34. #  define MODERN
  35. #endif
  36.  
  37. #if defined(__BORLANDC__) || (defined(__alpha) && defined(VMS))
  38. #  ifndef PROTO
  39. #    define PROTO
  40. #  endif /* !PROTO */
  41. #  define MODERN
  42. #endif
  43.  
  44. #ifdef __IBMC__
  45. #  define S_IFMT 0xF000
  46. #endif /* __IBMC__ */
  47.  
  48. #if defined(__EMX__) || defined(__WATCOMC__) || defined(__BORLANDC__)
  49. #  if (defined(OS2) && !defined(__32BIT__))
  50. #    define __32BIT__
  51. #  endif
  52. #endif
  53.  
  54. #if (defined(__OS2__) && !defined(OS2))
  55. #  define OS2
  56. #endif
  57.  
  58. #if defined(__GO32__) && defined(unix)   /* MS-DOS extender:  NOT Unix */
  59. #  undef unix
  60. #endif
  61.  
  62. #if defined(unix) || defined(M_XENIX) || defined(COHERENT) || defined(__hpux)
  63. #  ifndef UNIX
  64. #    define UNIX
  65. #  endif
  66. #endif /* unix || M_XENIX || COHERENT || __hpux */
  67. #if defined(__convexc__) || defined(MINIX) || defined(sgi)
  68. #  ifndef UNIX
  69. #    define UNIX
  70. #  endif
  71. #endif /* __convexc__ || MINIX || sgi */
  72.  
  73. #ifdef __COMPILER_KCC__
  74. #  define TOPS20
  75. #  define NOPROTO
  76. #endif
  77.  
  78. /* Turn off prototypes if requested */
  79. #if (defined(NOPROTO) && defined(PROTO))
  80. #  undef PROTO
  81. #endif
  82.  
  83. /* Used to remove arguments in function prototypes for non-ANSI C */
  84. #ifdef PROTO
  85. #  define OF(a) a
  86. #else /* !PROTO */
  87. #  define OF(a) ()
  88. #endif /* ?PROTO */
  89.  
  90. /* Avoid using const if compiler does not support it */
  91. #ifndef MODERN  /* if this fails, try: ifndef__STDC__ */
  92. #  define const
  93. #endif
  94.  
  95. #ifdef MACOS
  96. #  define DYN_ALLOC
  97. #endif
  98. #if (defined(MSDOS) && !defined(__GO32__) && !defined(WIN32))
  99. #  ifdef __TURBOC__
  100. #    include <alloc.h>
  101. #    define DYN_ALLOC
  102.      /* Turbo C 2.0 does not accept static allocations of large arrays */
  103.      void far * fcalloc OF((unsigned items, unsigned size));
  104.      void fcfree (void *ptr);
  105. #  else /* !__TURBOC__ */
  106. #    include <malloc.h>
  107. #    define farmalloc _fmalloc
  108. #    define farfree   _ffree
  109. #    define fcalloc(nitems,itemsize) halloc((long)(nitems),(itemsize))
  110. #    define fcfree(ptr) hfree((void huge *)(ptr))
  111. #  endif /* ?__TURBOC__ */
  112. #else /* !MSDOS */
  113. #  if defined(WIN32)
  114. #    include <malloc.h>
  115. #  endif
  116. #  ifdef __WATCOMC__
  117. #    undef huge
  118. #    undef far
  119. #    undef near
  120. #  endif
  121. #  ifndef __IBMC__
  122. #    define huge
  123. #    define far
  124. #    define near
  125. #  endif
  126. #  define farmalloc malloc
  127. #  define farfree   free
  128. #  define fcalloc(items,size) calloc((unsigned)(items), (unsigned)(size))
  129. #  define fcfree    free
  130. #endif /* ?MSDOS */
  131.  
  132.  
  133. #if (defined(OS2) && !defined(MSDOS))
  134. /* MSDOS is defined anyway with MS C 16-bit. So the block above works.
  135.  * For the 32-bit compilers, MSDOS must not be defined in the block above. */
  136. #  define MSDOS
  137. /* inherit MS-DOS file system etc. stuff */
  138. #endif
  139.     
  140.  
  141. /* Define MSVMS if MSDOS or VMS defined -- ATARI also does, Amiga could */
  142. #if defined(MSDOS) || defined(VMS)
  143. #  define MSVMS
  144. #endif
  145.  
  146. /* Define void, voidp, and extent (size_t) */
  147. #include <stdio.h>
  148. #ifdef MODERN
  149. #  if (!defined(M_XENIX) && !(defined(__GNUC__) && defined(sun)))
  150. #    include <stddef.h>
  151. #  endif /* !M_XENIX */
  152. #  include <stdlib.h>
  153. #  if defined(SYSV) || defined(__386BSD__)
  154. #    include <unistd.h>
  155. #  endif
  156.    typedef size_t extent;
  157.    typedef void voidp;
  158. #else /* !MODERN */
  159.    typedef unsigned int extent;
  160. #  define void int
  161.    typedef char voidp;
  162. #endif /* ?MODERN */
  163.  
  164. /* Get types and stat */
  165. #ifdef VMS
  166. #  include <types.h>
  167. #  include <stat.h>
  168. #  define unlink delete
  169. #  define NO_SYMLINK
  170. #  define SSTAT vms_stat
  171. #else /* !VMS */
  172. #  ifdef MACOS
  173. #    include <types.h>
  174. #    include <stddef.h>
  175. #    include <Files.h>
  176. #    include <StandardFile.h>
  177. #    include <Think.h>
  178. #    include <LoMem.h>
  179. #    include <Pascal.h>
  180. #    include "macstat.h"
  181. #    define NO_SYMLINK
  182. #  else
  183. #    ifdef ATARI_ST
  184. #      include <ext.h>
  185. #      include <tos.h>
  186. #    else
  187. #      ifdef AMIGA
  188. #        if defined(LATTICE) || defined(__SASC)
  189. #          include <sys/types.h>
  190. #          include <sys/stat.h>
  191.            extern int isatty(int);   /* SAS has no unistd.h */
  192. #        endif
  193. #        ifdef AZTEC_C
  194. #          include "amiga/z-stat.h"
  195. #          define RMDIR
  196. #        endif
  197. #      else /* !AMIGA */
  198. #        include <sys/types.h>
  199. #        include <sys/stat.h>
  200. #    endif
  201. #  endif
  202. #  endif
  203. #endif /* ?VMS */
  204.  
  205. #ifndef S_ISDIR
  206. #  define S_ISDIR(m)  (((m) & S_IFMT) == S_IFDIR)
  207. #endif
  208.  
  209. #include <ctype.h>
  210.  
  211. #ifndef _tolower
  212. #  define _tolower(c) ((c) + 'a' - 'A')
  213. #endif
  214. #ifndef _toupper
  215. #  define _toupper(c) ((c) + 'A' - 'a')
  216. #endif
  217.  
  218. #if defined(UNIX) || defined(T20_VMS)   /* generally old systems */
  219. /*  some compilers don't check if a character is already upper or lower
  220.  *  case in the toupper/tolower functions, so we define our own here.
  221.  */
  222. #  define ToLower(c)    (isupper((int)c) ? _tolower(c) : (c))
  223. #  define ToUpper(c)    (islower((int)c) ? _toupper(c) : (c))
  224. #else
  225. #  define ToLower      tolower          /* assumed "smart"; used in match() */
  226. #endif
  227.  
  228. #endif /* end of tailor.h */
  229.